API散歩道 上

キーフレーズ

ワタソン マホラムズ Windows ウインドウ ホラムズ API メッセージ プログラム MDI ヾステル コールバック DDE ファイル パレット フォント データ PeekMessage アプリケーション ビットマップ PAINT メニュー return 使っ void アクテイプ パステル Wind MDICLIENT ハンドル 関数 fprintf ーワタソン 使う 指定 BMP DIB できる 機能 CreateWindow DLL ダイアログボックス DOS 入力 ラスターオペレーション 処理 場合 hDC 説明 BeginPaint 必要 システム レストラン クリッピング RegisterClass SendMessage プログラムマネージャ 意味 PUSH EXE MakeProcInstance ユーザー lfClosest ノートパソコン SDK マホラムス 方法 アプリ フォーカス 作っ 入っ GetMessage ONLY ダイアログ クライアント つまり パソコン ビット 考え 逆ポーランド 全部 自分 表示 ノヾステル アイコン 設計図 Realize 入力フォーカス 領域 DEVICE スタック DispatchMessage たまえ モード わかっ リソース ファイル名 引数 簡単 クラス

目次

D 旧の種類 = ホラムズ「 TrueColor, 1670 万色だ」 トは 256 色。 24 ビットは , ええと , ええと」 ■ワタソン「 1 ビットというのはモノクロだね , 白と黒だけの。 4 ビットは 16 色で 8 ビッ マホラムズ「では , 話を戻そう。 24 ビットについては正しく理解しているようだが , ほ なかったなあ」 臨ワタソン「うーん , ただの BMP ファイルから , いきなりそんな話に発展するとは思わ してからだね」 マホラムズ「でも , それを実行するとメモリを余計に食うから , やるならメモリを増設 ■ワタソン「そういう楽しみ方もあったのか」 ▽ホラムズ「もう , 写真に近いクオリティの画像を壁紙にできてしまうね」 んなこともできるんだ」 ワタソン「あ , そうか。 1670 万色サポートのディスプレイカードを使っていれば , そ ると便利かもしれないし , だいいち BMP ファイルなら壁紙になるじゃない いからね。でも , データ形式をコンバートするとき , 一時的にこの形式にす マホラムズ「まあ , 圧縮もしてない BMP ファイルで 24 ビットの画像なんて普通は使わな ■ワタソン「僕は , 1670 万色の BMP ファイルなんて見たことがないから」 マホラムズ「そうだよ。知らなかった ? 」 ■ワタソン「え ? そうなの ? そんな色数まで BMP ファイルになっちゃうわけ ? 」 かは誤解があるようだね」 v ホラムズ「 1 ビットを , 白と黒といったよね」 ■ワタソン「ああ。モノクロじゃないのかい ? 」 ホラムズ「 1 ビットの DIB は 2 色を扱えるけど , かまわないんだ」 ■ワタソン「え ? 」 これは白と黒に限らない。赤と青でも ■ワタソン「なんでそんなことができるんだい ? 1 ビットといえばモノクロディスプレ イなんかで使う形式なんじゃないのかい ? 」 マホラムズ「いや。 1 ビットの DIB は , 単に 1 ピクセルを格納するのに 1 ビット使うとい うだけさ。それ以上の意味はないよ。それに , 4 ビットの DIB も同様に好き な 1 6 色の組み合わせで作れる。決してシステムの固定パレットの 16 色にな ってしまうわけじゃない」 ワタソン「つてことは , 1 ビットの BMP ファイルでもモノクロモニタで再現できなか ったり , 4 ビットの BMP ファイルでも 16 色のシステムで再現できないことが あるっていうのかい ? 」 マホラムズ「そのとおり。例えばパソコン通信なんかでよく使われる , MAG フォーマッ

り 第 7 章 BM P ファイルと D 旧 すためのものだからね。必要なのは残りの情報というわけだ」 ■ワタソン「すると , メモリ上でどういう形式で扱うかもこの構造体を調べればわかる ってわけなんだね ? 」 ▽ホラムズ「そうだ」 BII PFIL 日を R 構造体 ー BI 靆 INFI) ADER 構造体 U 胆構造体の配列 ( 必要なら ) BY 旺の配列 図 1 BM P ファイルの構造 OD 旧の ■ワタソン「よし。これで完璧だ。帰ってさっそくプログラムを作ってみよう」 マホラムズ「ところで , 君は気軽に BMP ファイルとーロでいっているけれど , 単純に 1 種類だけだと思っているのかな ? 」 ーワタソン「ああ , OS / 2 形式のちょっと違うファイルがあるって聞いたことがあるよ」 マホラムズ「いや , それのことじゃなくて , 我々が普段使っている Windows の BMP フ ァイルのことさ」 ■ワタソン「 1 種類じゃないのかい ? 」 マホラムズ「ファイルのフォーマットを思い返してみたまえ。 TRGBQUAD 構造体の配 列 ( 必要なら ) 』といっただろう ? この配列が必要なときとそうでないと きがあるんだ。それに , 配列といってもどれくらいのサイズを確保すればい いんだろうね」 ■ワタソン「むむむ。それはよくわからないぞ」 マホラムズ「それに , TBYTE の配列』とあっさりいったけど , いったいどういう形式で 入っているんだろうね。さすがに , これについての説明は BYTE の説明を引 いても出てないよ」 ■ワタソン「ホラムズの意地悪。なにか問題があるなら教えてくれよ」 マホラムズ「よし。 DIB の形式には , いくつかの種類があるんだ。それによってデータ の格納のしかたががらっと変わってしまう」 ■ワタソン「種類というと ? 」 ホラムズ「 1 ビット , 4 ビット , 8 ビット , 24 ビットの 4 種類だ。それぞれ , ひとつのド ット ( ピクセル ) を表現するために何ビットの情報をもっているかで区別され

BMP ファイルのフォーマット 0 : マホラムズ こに VC + + の入ったノートパソコンがあるじゃないか。これに入ってい る , 英語版 Win3.1 の SDK リファレンスのヘルプファイルだけで , 全部教え てあげよう」 ■ワタソン「えーっ ! ? ほんとかなあ」 OBMP ファイルのフォーマット ■ワタソン「じゃあ , BMP ファイルのフォーマットが , そのヘルプファイルからわかる っていうのかい ? 」 マホラムズ「目次から Overviews を選んで , Fi1eFormats を選ぶ。そしてその中から Graphics File Formats を選んでごらん」 ( 注 : 日本語版のヘルプの場合 , 「概要』の下の「ファイル形式』の下の「グラフィックファイ ル形式」にあたります ) ■ワタソン「ふむふむ」 マホラムズ「すると , ほら , 出てくるだろう ? 」 ■ワタソン「あれあれ。英語はよくわからないけどファイルフォーマットの説明は , ほ んの数行じゃないか。残りはファイルストラクチャとかいう説明になってい るよ。ああ , やつばりダメじゃないか。 SDK のマニュアルにも , これくらい しか書いてなかったぞ」 マホラムズ「では説明しよう。 BMP ファイルの具体的な内容については , こでは説明 されていない」 ■ワタソン「それじゃあ , いったいどこで説明してるんだい ? 」 「構造体のところさ」 ホラムズ ■ワタソン「え ? 」 ・「そもそも BMP ファイルのデータ構造というのは , 構造体の形で定義されて マホラムス いるんだ。そうすると , プログラムの中で利用するのも楽だからね。 みんな引っかかるのかもしれないね」 ■ワタソン「なんてこった。全然別の場所を探していたぞ」 マホラムズ「 BMP ファイルのおおざっぱな構造は , こんなふうになっているんだ ( 図 1) 。 だから , これらの構造体の説明を参照すれば , 自然に BMP ファイルのフォ ーマットが理解できるという仕組みだ」 ■ワタソン「なるほど ! そうだったのか。マイクロソフトも人が悪いなあ」 ▽ホラムズ「これをメモリ上に読み込んで利用するときには , BITMAPFILEHEADER 構 造体の情報は必要ない。ファイルの中にどういう情報を入れたか , それを示